// const baseUrl = 'http://1.116.253.96:8080'
const baseUrl = 'http://127.0.0.1:5000' //本地开发环境

var COS = require('../lib/cos-wx-sdk-v5.js')

export const formatTime = (date: Date) => {
    const year = date.getFullYear()
    const month = date.getMonth() + 1
    const day = date.getDate()
    const hour = date.getHours()
    const minute = date.getMinutes()
    const second = date.getSeconds()

    return (
        [year, month, day].map(formatNumber).join('/') +
        ' ' +
        [hour, minute, second].map(formatNumber).join(':')
    )
}

const formatNumber = (n: number) => {
    const s = n.toString()
    return s[1] ? s : '0' + s
}

export function Authorize() {
    wx.login({
        success(res) {
            if (res.code) {
                //发起网络请求
                Request({
                    url: '/authorize',
                    method: 'post',
                    data: {
                        code: res.code
                    }
                })
            } else {
                console.log('登录失败！' + res.errMsg)
            }
        }
    })
}

export function Request(obj) {
    return new Promise((resolve, reject) => {
        wx.request({
            url: baseUrl + obj.url,
            method: obj.method,
            data: obj.data,
            header: {
                'Authorization': 'Bearer ' + String(wx.getStorageSync('token'))
            },
            success: function (res) {
                if (res.statusCode == '401' || res.statusCode == '422') {
                    wx.showLoading({
                        title: '认证已过期!'
                    })
                    setTimeout(function () {
                        wx.reLaunch({
                            url: '/pages/index/index'
                        });
                    }, 2000)
                }
                resolve(res.data);
            },
            fail: function (error) {
                reject(error);
            }
        })
    });
}

export const Groups = ['视频组', '运营组', '美工组', '直播组', '音频组', '其他组']

var cos = new COS({
    // ForcePathStyle: true, // 如果使用了很多存储桶，可以通过打开后缀式，减少配置白名单域名数量，请求时会用地域域名
    SimpleUploadMethod: 'putObject', // 强烈建议，高级上传、批量上传内部对小文件做简单上传时使用putObject,sdk版本至少需要v1.3.0
    getAuthorization: function (options, callback) {
        // 初始化时不会调用，只有调用 cos 方法（例如 cos.putObject）时才会进入
        // 异步获取临时密钥
        Request({
            url: '/gettmpkeys',
            method: 'get'
        }).then(res => {
            console.log(res)
            var data = res.response;
            var credentials = data.credentials;
            if (!data || !credentials) return console.error('credentials invalid');
            callback({
                TmpSecretId: credentials.tmpSecretId,
                TmpSecretKey: credentials.tmpSecretKey,
                // v1.2.0之前版本的 SDK 使用 XCosSecurityToken 而不是 SecurityToken
                SecurityToken: credentials.sessionToken,
                // 建议返回服务器时间作为签名的开始时间，避免用户浏览器本地时间偏差过大导致签名错误
                StartTime: data.startTime, // 时间戳，单位秒，如：1580000000
                ExpiredTime: data.expiredTime, // 时间戳，单位秒，如：1580000900
            });
        }).catch(error => {
            console.log(error);
        });
    }
});

// 接下来可以通过 cos 实例调用 COS 请求。
// TODO
export function handleFileInUploading(fileName, filePath) {
    console.log(fileName,filePath)
    cos.uploadFile({
        Bucket: 'seubilibili-1300357628', /* 填写自己的 bucket，必须字段 */
        Region: 'ap-nanjing',     /* 存储桶所在地域，必须字段 */
        Key: fileName,              /* 存储在桶里的对象键（例如:1.jpg，a/b/test.txt，图片.jpg）支持中文，必须字段 */
        FilePath: filePath, /* 上传文件路径，必须字段 */
        SliceSize: 1024 * 1024 * 5,     /* 触发分块上传的阈值，超过5MB使用分块上传，小于5MB使用简单上传。可自行设置，非必须 */
        onProgress: function(progressData) {
            console.log(JSON.stringify(progressData));
        }
    }, function(err, data) {
        if (err) {
          console.log('上传失败', err);
        } else {
          console.log('上传成功');
        }
    });
  }


// 保存图片
  
function openSetting (authSetting) {
    new Promise((resolve, reject) => {
        wx.openSetting({
            success: (opSet) => {
                if (opSet.authSetting[authSetting]) {
                    // 授权成功
                    resolve(1)
                }
            },
            fail: () => {
                wx.showToast({ icon: 'none', title: '打开设置失败,请重新设置' })
                reject(0)
            }
        })
    })
}

function handlerAuthSetting (authSetting, callBack, authMessage = '') {
    wx.getSetting({
        success: (setting) => {
        if (setting.authSetting[authSetting]) {
            // 已授权
            callBack && callBack()
        } else {
            // 没授权，请求授权
            wx.authorize({
            scope: authSetting,
            success: () => {
                // 授权成功
                callBack && callBack()
            },
            fail: function() {
                // 授权失败
                wx.showModal({
                title: '温馨提示',
                content: authMessage,
                success: async () => {
                    const isAuth = await openSetting(authSetting)
                    isAuth && callBack && callBack()
                }
                })
            }
            })
        }
        }
    })
}

function saveImage2Album(imgSrc) {
    wx.saveImageToPhotosAlbum({
        filePath: imgSrc,
        success: () => {
        wx.hideLoading()
        wx.vibrateShort()
        wx.showModal({
            content: '图片已保存到相册~',
            showCancel: false,
            confirmText: '好的',
            confirmColor: '#333'
        })
        },
        fail: (err) => {
        wx.hideLoading()
        console.log('失败原因：', err)
        wx.showToast({ icon: 'none', title: '保存失败' })
        }
    })
}
export  function savePhoto (imgSrc) {
    if (!wx.saveImageToPhotosAlbum) {
        wx.hideLoading()
        return void wx.showModal({
        title: '提示',
        content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
        })
    }
    handlerAuthSetting('scope.writePhotosAlbum', () => {
        saveImage2Album(imgSrc)
    }, '需要获取相册写入权限~')
}

  
